import requests # 导入requests库，用于发送HTTP请求

class ApiClient:
    # 初始化方法，创建API客户端实例
    def __init__(self, base_url):
        # 基础URL，移除末尾的斜杠避免重复 (例如: "https://api.com/" -> "https://api.com")
        self.base_url = base_url.rstrip('/')
        # 创建会话对象，保持连接复用，提高性能
        self.session = requests.Session()
        # 设置默认请求头，指定内容类型为JSON格式
        self.session.headers = {"Content-Type": "application/json"}

    # 内部方法：构建完整的请求URL
    def url(self,path):
        # 拼接完整URL：基础URL + 路径，移除路径开头的斜杠避免重复
        return f'{self.base_url}/{path.lstrip("/")}'

    # GET请求方法：用于获取资源
    def get(self,path,params=None,headers=None):
        # 发送GET请求：URL + 查询参数 + 自定义请求头
        return self.session.get(self.url(path),params=params,headers=headers)

    # POST请求方法：用于创建新资源
    def post(self,path,data=None,json_data=None,headers=None):
        # 判断使用JSON格式还是普通数据格式
        # 如果传入了json_data参数，使用json参数发送JSON数据
        # 否则使用data参数发送普通数据
        kwargs = {'json':json_data} if json_data else {'data':data}
        # 发送POST请求：URL + 数据 + 自定义请求头
        return self.session.post(self.url(path),headers=headers,**kwargs)

    # PUT请求方法：用于更新完整资源
    def put(self,path,data=None,json_data=None,headers=None):
        # 判断使用JSON格式还是普通数据格式（逻辑同POST方法）
        kwargs = {'json':json_data} if json_data else {'data':data}
        # 发送PUT请求：URL + 数据 + 自定义请求头
        return self.session.put(self.url(path),headers=headers,**kwargs)

    # DELETE请求方法：用于删除资源
    def delete(self,path,headers=None):
        # 发送DELETE请求：URL + 自定义请求头
        return self.session.delete(self.url(path),headers=headers)